目錄
在電腦的 Python 可以透過 pip 來安裝第三方的套件,本篇文章主要是介紹如何在 MicroPython 裡安裝新的套件 requests,以及透過這新套件上傳資料到 Google Forms,模擬上傳溫度的感測功能。
以下步驟表示新增和使用套件時的流程:
mip (mip installs packages) 的概念與 Python 的 pip 工具相似,但是它不使用 pypi 索引,默認情況下,是使用 micropython-lib 作為其索引。 從 micropython-lib 下載時,mip 將自動獲取 .mpy 文件。該模組可以從 micropython-lib 和第三方站點(套件括GitHub)安裝套件裝。
在 REPL 環境下使用 mip 安裝的語法,但先決條件是 ESP32-CAM 必須要先連上網。
import mip
mip.install("pkgname") # 直接指定套件名稱,會從 https://micropython.org/pi/v2 找尋並安裝
mip.install("pkgname", version="x.y") # 指定套件名稱與版次
mip.install("pkgname", mpy=False) # 安裝原碼文件 (會是 .py 而不是 .mpy 檔)
mip.install("http://example.com/x/y/foo.py") # 安裝第三方套件
mip.install("github:org/repo/path/foo.py", target="third-party") # 從 GitHub 直接安裝
mip.install("github:org/user/path/package.json") # 安裝比較複雜的套件,套件含了一些相依庫的描述
mip 預設會把套件安裝在(/lib) 中。如果有指定 target 選項,則會安裝在該目錄,但記得在 sys.path 變量中,加入該目錄 (sys.path.append("third-party")
),不然 import 會找不到該套件的所在位置。
安裝 mip
因為原先韌體預設沒有安裝mip,所以要透過遠程方式 (mpremote) 安裝 mip,我們可以使用 Thonny 的畫面來操作這個安裝功能,選擇工具列中的工具->管理套件,進入套件管理畫面,如下圖所示。
下圖可以看到在 Thonny 上進行安裝 mip,會連到 PyPI 與 micropython-lib 網站進行搜尋並下載安裝,會安裝在 ESP32-CAM 的 /lib 路徑,安裝時會一並安裝相依套件 requests,安裝完畢後再進入 Thonny 環境,就可以正常使用 mip。
圖 1. 使用 Thonny 安裝 mip
圖 2. mip 安裝在 ESP32-CAM 所在路徑
接下來要練習從 ESP32-CAM 上傳溫度到 Google Forms 中,首先先建立 Google Forms,用來記錄溫度的表格:
圖 3. 新增 Google Forms
連結格式如下
https://docs.google.com/forms/d/e/1FAIpQLScuWtqDbWAMqiRqc4PnRqBNTBXxKKxTjy-7rG6mBgjqwb7caTA/viewform?usp=pp_url&entry.898245151=32.0
修改後方的 viewform?usp=pp_url&entry.898245151=32.0
修改完,如下所示,將這個網址貼到瀏覽器上
https://docs.google.com/forms/d/e/1FAIpQLScuWtqDbWAMqiRqc4PnRqBNTBXxKKxTjy-7rG6mBgjqwb7caTA/formResponse?entry.898245151=35.2&submit=submit
圖 5. 輸入修改後的預先填入的連結網址
圖 6. 觀看回覆結果
安裝urequests
在 Thonny 中安裝 urequests,因為需要透過這個套件才能模擬瀏覽器的動作,說明一下,mip也有安裝requests的套件,但這個套件無法是用 https 的存取,所以需要額外安裝套件。
圖 7. 安裝urequests
在接著在 Thonny 中輸入以下程式碼,記得將
import network, time
import urequests as requests
print('connect ot Wi-Fi')
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('your-ssid', 'your-password')
while not wlan.isconnected():
time.sleep(1)
print('.',end='')
pass
print('connected')
url = 'https://docs.google.com/forms/d/e/1FAIpQLScuWtqDbWAMqiRqc4PnRqBNTBXxKKxTjy-7rG6mBgjqwb7caTA/formResponse?entry.898245151=32.5&submit=submit'
r = requests.get(url)
print(r.reason)
執行成功會顯示 OK
圖 8. 安裝urequests
圖 6. 觀看回覆結果